////////////////////////////////////////////////////
// WebSocket
////////////////////////////////////////////////////
(function(){
	// WebSocketサーバに接続する。
	var ws = new WebSocket("ws://"+location.host+":1111");
	
	// コネクション確立時
	ws.onopen = function(){
		// "imageupdate"イベント（画像が更新された）をハンドリングする
		$(window).bind("imageupdate", function(e, data){
			// カメラ画像をWebSocketで送信する
			ws.send(data);
		});
	}
})();


//////////////////////////////////////////////////////
// video capturing
//////////////////////////////////////////////////////
(function(){
	window.VideoCapture = VideoCapture;
	
	// コンストラクタ
	function VideoCapture(){
		// video要素の取得
		video = document.getElementsByTagName('video')[0];
		
		// キャプチャを開始する
		if (navigator.getUserMedia) {
		    navigator.getUserMedia('video', startCapture_, error_);
		} else {
		    alert("Webカメラのstreaming apiがサポートされていません");
		}
	}
	
	var timer = null;

	/**
	 * キャプチャ開始
	 * @param {Object} stream
	 */
	function startCapture_(stream){
		// video要素に対して、カメラからのストリームを設定
		video.src = stream;

		
		
		
		// 30fps(33msecおき）に画像を取得する。
		// 取得したら、"imageupdate"イベントをfireする。
		timer = setInterval(function(){
			try {
				// キャンバスノードの生成
				var cvs = document.createElement('canvas');
				cvs.width = video.width;
				cvs.height = video.height;
				var ctx = cvs.getContext('2d');
				
				// キャンバスに描画
        // 以下のサイズは、Desire用。Galaxyでは、480 x 640
				ctx.drawImage(video, 0, 0, 240, 400, 0, 0, video.width, video.height);
				// DataURLを取得し、イベントを発行する
				var data = cvs.toDataURL('image/jpeg');
				$(window).trigger("imageupdate", data);
			} catch(e) {
				// エラー時
				error_(e);
			}
		}, 33);
	}	
	
	/**
	 * エラー時
	 * @param {Object} error
	 */
    function error_(error){
        alert("Error: [CODE " + error.code + "]");
		if(timer)
			clearInterval(timer);
    }
})();

// 処理開始
$(function(){
	VideoCapture();
});


